package main

import (
	"fmt"
)

//一个结构体里可以存放另一个结构体，以此达到继承的效果

/*
空结构体  节省空间  不占用空间
	-- 占位作用
int、string
var a int 零值，也会分配空间

实现方法的接收者
实现集合
实现空channel
 */

type Person struct {
	name string
	age int
}

type Set map[string]struct{}

func (s Set) Append(k string) {
	s[k] = struct{}{}
}

func(s Set) Remove(k string){
	delete(s, k)
}

func main(){
	s1 := Set{}
	s1.Append("b")
	s1.Append("a")
	s1.Append("b")
	fmt.Println(s1)

}

type Person2 struct {
	age int
}

type Teacher struct {
	Person
	subject string
	name string
}

func (p *Person) Hello() {
	fmt.Println("i am person")
}

type T struct {}
func(t *T) Hello(){
	fmt.Println("hello,world!")
}

	//t1 := Teacher{}
	//t1.subject = "computer"
	//t1.name = "xx"
	//t1.Person2.age = 18
	//fmt.Printf("%+v\n", t1)
	//t1.Person.age = 19
	//fmt.Printf("%+v\n", t1)
	//t1.Hello()
	//t2 := Teacher{
	//	Person{name:"xyz",age:80},"chinese","xixi",
	//}
	//fmt.Printf("%+v\n", t2)
	//p1 := Person{"aaa",20}
	//var t1 T
	//t1.Hello()


